RC ve ARC Yapıları
Çoğu durumda sahiplik gayet açıktır. Kimin neye veya kime sahip olduğunu biliriz. Ancak bazı durumlarda bir değerin birden fazla sahibinin olmasını isteyebiliriz. Örneğin Graph veri yapıları olmaktadır. BKNZ
Rust üzerinde bir değerin birden fazla sahibinin olması için Rc
yapılarına sahibiz. Bu yapının açılımı Referance Counting
olmaktadır.
RC yapıları box
referansı gibi heap
üzerinde tutalmaktadır. Bir veriye kaç adet referans yapıldığını sayarak bu verinin halen kullanılıp kullanılmadığını hesaplamaktadır. Doğal olarak bir değere 0 adet referans bulunuyorsa o değer temizlenmektedir.
Bu durumlara ek olarak birde arc
yapıları bulunmaktadır. Açılımı Atomic Referance Counter
olmkatadır. RC yapıları ile aynı olmaktadır ancak fark olarak thread
'ler arasında güvenli bir paylaşımı sağlamaktadır. RC genellikle yeterlidir.
RC yapısında bir pointer
oluşturmak için ilk olarak projemize Rc
eklenmelidir.
use std::rc::Rc;
Artık kodlarımız içerisinde Rc
türünde pointerlar oluşturabiliriz.
let s1 = Rc::new(String::from("Pointer"))
Yapıyı oluşturduğumuza göre .clone()
ifadesi ile bu yapıya referans oluşturabiliriz.
let s2 = s1.clone();
let s3 = s2.clone();
Sonrasında çalıştığını kanıtlamak için her birini yazdırabiliriz.
println!("{} {} {}", s1, s2 ,s3); // Pointer Pointer Pointer
Bu örneğimizde String değerimize bağlı 3 adet referans değeri vardır yani Rc 3'e eşittir.
Ayrıca heap üzerinde direkt String tutulduğu için tüm String methodları kullanılabilir.